草庐IT

Java HotSpot 枚举开销

全部标签

c++ - 没有虚函数的 C++ 继承开销

在C++中,与继承没有虚函数的基类相关的开销(内存/cpu)是多少?和直接复制+粘贴类(class)成员一样好吗?classa{public:voidget();protected:int_px;}classb:publica{}对比classa{public:voidget();protected:int_px;}classb{public:voidget();protected:int_px;} 最佳答案 与复制和过去相比,使用继承时可能会有轻微的内存开销(由于填充),请考虑以下类定义:structA{inti;charc1;}

c++ - 没有虚函数的 C++ 继承开销

在C++中,与继承没有虚函数的基类相关的开销(内存/cpu)是多少?和直接复制+粘贴类(class)成员一样好吗?classa{public:voidget();protected:int_px;}classb:publica{}对比classa{public:voidget();protected:int_px;}classb{public:voidget();protected:int_px;} 最佳答案 与复制和过去相比,使用继承时可能会有轻微的内存开销(由于填充),请考虑以下类定义:structA{inti;charc1;}

c++ - C++中的64位枚举?

有没有办法在C++中使用64位枚举?在重构一些代码时,我遇到了一堆#defines,它们作为枚举会更好,但大于32位会导致编译器出错。出于某种原因,我认为以下方法可能有效:enumMY_ENUM:unsigned__int64{LARGE_VALUE=0x1000000000000000,}; 最佳答案 我认为这在C++98中是不可能的。枚举的底层表示由编译器决定。在这种情况下,您最好使用:const__int64LARGE_VALUE=0x1000000000000000L;从C++11开始,可以使用枚举类来指定枚举的基本类型:e

c++ - C++中的64位枚举?

有没有办法在C++中使用64位枚举?在重构一些代码时,我遇到了一堆#defines,它们作为枚举会更好,但大于32位会导致编译器出错。出于某种原因,我认为以下方法可能有效:enumMY_ENUM:unsigned__int64{LARGE_VALUE=0x1000000000000000,}; 最佳答案 我认为这在C++98中是不可能的。枚举的底层表示由编译器决定。在这种情况下,您最好使用:const__int64LARGE_VALUE=0x1000000000000000L;从C++11开始,可以使用枚举类来指定枚举的基本类型:e

c++ - 如何衡量函数的调用开销?

我想测量和比较不同函数调用的开销。在处理扩展类同时最小化代码修改的两种替代方法的意义上有所不同:使用抽象基类并在虚拟成员函数中提供实现使用策略宿主类并使用静态和成员函数定义不同的策略这两个选项都与根本不调用函数进行了比较。我也知道NVI设计支持动态多态的类时通常使用的惯用语——我使用的示例只是开销的基准。这是我尝试用于此目的的代码:#include#include#include#include#includeclassInterface{public:virtualdoublecalculate(doublet)=0;virtual~Interface()=default;};cla

c++ - 如何衡量函数的调用开销?

我想测量和比较不同函数调用的开销。在处理扩展类同时最小化代码修改的两种替代方法的意义上有所不同:使用抽象基类并在虚拟成员函数中提供实现使用策略宿主类并使用静态和成员函数定义不同的策略这两个选项都与根本不调用函数进行了比较。我也知道NVI设计支持动态多态的类时通常使用的惯用语——我使用的示例只是开销的基准。这是我尝试用于此目的的代码:#include#include#include#include#includeclassInterface{public:virtualdoublecalculate(doublet)=0;virtual~Interface()=default;};cla

c++ - 使用枚举作为模板参数

我想使用一个模板类来为一些非常相似的子类提供一些通用功能。唯一的变化是每个使用的枚举。这是父类templateclassE_EnumerationBase:publicSimpleElement{public:E_EnumerationBase();virtualboolsetValue(QStringchoice);virtualTgetState();protected:Tstate;QHashdictionary;};templateE_EnumerationBase::E_EnumerationBase(){state=0;}templateboolE_EnumerationB

c++ - 使用枚举作为模板参数

我想使用一个模板类来为一些非常相似的子类提供一些通用功能。唯一的变化是每个使用的枚举。这是父类templateclassE_EnumerationBase:publicSimpleElement{public:E_EnumerationBase();virtualboolsetValue(QStringchoice);virtualTgetState();protected:Tstate;QHashdictionary;};templateE_EnumerationBase::E_EnumerationBase(){state=0;}templateboolE_EnumerationB

c++ - 从 C++ 宏创建字符串列表和枚举列表

为了使我的代码更短更容易更改,我想替换类似的东西enum{E_AAA,E_BBB,E_CCC};staticconstchar*strings{"AAA","BBB","CCC"};使用宏,例如INIT(AAA,BBB,CCC);但是当我尝试使用可变参数和字符串化做一个宏时,我得到一个错误,因为没有声明参数。你知道怎么做吗? 最佳答案 这是我几天前学到的解决方案。处理您的问题的简化版是:#defineENUM_MACRO(name,v1,v2,v3,v4,v5,v6,v7)\enumname{v1,v2,v3,v4,v5,v6,v7

c++ - 从 C++ 宏创建字符串列表和枚举列表

为了使我的代码更短更容易更改,我想替换类似的东西enum{E_AAA,E_BBB,E_CCC};staticconstchar*strings{"AAA","BBB","CCC"};使用宏,例如INIT(AAA,BBB,CCC);但是当我尝试使用可变参数和字符串化做一个宏时,我得到一个错误,因为没有声明参数。你知道怎么做吗? 最佳答案 这是我几天前学到的解决方案。处理您的问题的简化版是:#defineENUM_MACRO(name,v1,v2,v3,v4,v5,v6,v7)\enumname{v1,v2,v3,v4,v5,v6,v7